package service

import (
	"fmt"
	"software/global"
	"software/models/result"

	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	imageaudit "github.com/alibabacloud-go/imageaudit-20191230/v3/client"
)

// 创建审核客户端
func createAuditClient() (*imageaudit.Client, error) {
	config := &openapi.Config{
		AccessKeyId:     &global.Config.Aliyun.AccessKeyId,
		AccessKeySecret: &global.Config.Aliyun.AccessKeySecret,
		Endpoint:        &global.Config.Aliyun.Endpoint,
		RegionId:        &global.Config.Aliyun.Region,
	}

	client, err := imageaudit.NewClient(config)
	if err != nil {
		global.Log.Errorf("创建阿里云审核客户端失败: %v", err)
		return nil, fmt.Errorf("系统错误，请稍后再试")
	}
	return client, nil
}

// AuditImage 同步审核图片
func AuditImage(imageURL string) (*result.AuditResult, error) {
	client, err := createAuditClient()
	if err != nil {
		return nil, err
	}

	// 构建请求
	request := &imageaudit.ScanImageRequest{
		Task: []*imageaudit.ScanImageRequestTask{
			{
				ImageURL: &imageURL,
			},
		},
		Scene: []*string{
			strPtr("porn"),
			strPtr("terrorism"),
			strPtr("ad"),
			strPtr("live"),
			strPtr("qrcode"),
		},
	}

	// 发送请求
	resp, err := client.ScanImage(request)
	if err != nil {
		global.Log.Errorf("发送图片审核请求失败: %v", err)
		return nil, fmt.Errorf("图片审核服务暂时不可用，请稍后再试")
	}

	// 处理响应
	if resp.Body == nil || resp.Body.Data == nil || len(resp.Body.Data.Results) == 0 {
		return nil, fmt.Errorf("审核结果为空")
	}

	// 构建审核结果
	auditResult := &result.AuditResult{
		Passed:  true,
		Details: make([]string, 0),
	}

	// 处理各个场景的审核结果
	// 处理各个场景的审核结果
	for _, r := range resp.Body.Data.Results {
		// 遍历 SubResults 获取具体的审核项
		for _, subResult := range r.SubResults {
			if subResult.Label != nil && subResult.Suggestion != nil && subResult.Rate != nil && subResult.Scene != nil {
				// 如果有任何一个场景建议block或review，则认为未通过审核
				if *subResult.Suggestion == "block" || *subResult.Suggestion == "review" {
					auditResult.Passed = false
					auditResult.Suggestion = *subResult.Suggestion
					auditResult.Label = *subResult.Label
					auditResult.Rate = float64(*subResult.Rate)
					auditResult.Scene = *subResult.Scene
					auditResult.Details = append(auditResult.Details,
						fmt.Sprintf("%s: %s (%.2f%%)", *subResult.Scene, *subResult.Label, *subResult.Rate))
				}
			}
		}
	}

	return auditResult, nil
}

//
//// AuditImageByBase64 通过Base64数据审核图片
//func AuditImageByBase64(imageBase64 string) (*result.AuditResult, error) {
//	client, err := createAuditClient()
//	if err != nil {
//		return nil, err
//	}
//
//	// 构建请求
//	request := &imageaudit.ScanImageRequest{
//		Task: []*imageaudit.ScanImageRequestTask{
//			{
//				ImageData: &imageBase64,
//			},
//		},
//		Scene: []*string{
//			strPtr("porn"),
//			strPtr("terrorism"),
//			strPtr("ad"),
//			strPtr("live"),
//			strPtr("qrcode"),
//		},
//	}
//
//	// 发送请求
//	resp, err := client.ScanImage(request)
//	if err != nil {
//		global.Log.Errorf("发送图片审核请求失败: %v", err)
//		return nil, fmt.Errorf("图片审核服务暂时不可用，请稍后再试")
//	}
//
//	// 处理响应
//	if resp.Body == nil || resp.Body.Data == nil || len(resp.Body.Data.Results) == 0 {
//		return nil, fmt.Errorf("审核结果为空")
//	}
//
//	// 构建审核结果
//	auditResult := &result.AuditResult{
//		Passed:  true,
//		Details: make([]string, 0),
//	}
//
//	// 处理各个场景的审核结果
//	for _, r := range resp.Body.Data.Results {
//		if r.Label != nil && r.Suggestion != nil && r.Rate != nil {
//			// 如果有任何一个场景建议block或review，则认为未通过审核
//			if *r.Suggestion == "block" || *r.Suggestion == "review" {
//				auditResult.Passed = false
//				auditResult.Suggestion = *r.Suggestion
//				auditResult.Label = *r.Label
//				auditResult.Rate = *r.Rate
//				auditResult.Scene = *r.Scene
//				auditResult.Details = append(auditResult.Details,
//					fmt.Sprintf("%s: %s (%.2f%%)", *r.Scene, *r.Label, *r.Rate))
//			}
//		}
//	}
//
//	return auditResult, nil
//}

// strPtr 返回字符串的指针
